package com.itheima.tlias84.service.impl;

import com.itheima.tlias84.annotation.Log;
import com.itheima.tlias84.dto.SelectAllDeptDTO;
import com.itheima.tlias84.entity.Dept;
import com.itheima.tlias84.mapper.DeptMapper;
import com.itheima.tlias84.po.InsertDeptParam;
import com.itheima.tlias84.service.DeptService;
import com.itheima.tlias84.utils.ResultUtil;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.awt.*;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;

/**
 * 部门服务实现类-->标注为@service
 */
@Service
public class DeptServiceImpl implements DeptService {

    //2、获取mapper对象
//    @Autowired
    @Resource
    DeptMapper deptMapper;


    //1、实现selectAll方法
    @Override
    public List<SelectAllDeptDTO> selectAll() {
//        int a = 1;
//        if (a==1){
//            throw new ArithmeticException("查询所有部门发生1/0异常");
//        }
        //3、mapper调用方法
        List<SelectAllDeptDTO> dtos = deptMapper.selectAll();
        return dtos;
    }

    @Override
    public int insertDept(InsertDeptParam param) {
        Dept dept = new Dept();
        dept.setName(param.getName());
        dept.setCreateTime(LocalDateTime.now());
        dept.setUpdateTime(LocalDateTime.now());
        //使用mapper调用方法来实现逻辑
        int inserted = deptMapper.insertDept(dept);
        return inserted;
    }


    @Override
    public int deleteById(Integer id) {
        //mapper调用方法
        return deptMapper.deleteById(id);
    }

    @Override
    public SelectAllDeptDTO selectDeptById(Integer id) {
        return  deptMapper.selectDeptById(id);
    }

    /**
     * 作业1、
     * 校验部门名称是否重复
     * 根据id、name查询部门
     * 如果id不相同-->部门名称重复
     * -->需要修改service的返回值
     */
    @Override
    public ResultUtil updateDeptById(Dept dept) {

        dept.setUpdateTime(LocalDateTime.now());

        Dept selected = deptMapper.selectDeptByName(dept.getName());
        if (Objects.nonNull(selected) && selected.getId() != dept.getId()){
            return ResultUtil.fail( "部门名称重复");
        }
        deptMapper.updateDeptById(dept);
        return ResultUtil.success();

//        List<SelectAllDeptDTO> list = deptMapper.selectAll();
//        for (SelectAllDeptDTO dto : list) {
//            if (dept.getName().equals(dto.getName())) {
//                return "部门名称相同";
//            }
//        }
//        int updated = deptMapper.updateDeptById(dept);
//        return "修改成功";
    }

    /**
     * 作业3
     * 日常作业
     */


    /**
     * * 作业2
     * * 用 xml 写部门的批量删除以及批量新增
     * * （在资源下建包：com/itheima/xml...）
     */

    /**
     * 批量新增
     *
     * @param list 部门列表
     * @return 新增的记录数
     */
    @Override
    public int insertDeptBatch(List<Dept> list) {
        list.forEach(dept -> {
            dept.setCreateTime(LocalDateTime.now());
            dept.setUpdateTime(LocalDateTime.now());
        });
        return deptMapper.insertDeptBatch(list);
    }

    /**
     * 批量删除
     *
     * @param ids id列表
     * @return 删除的记录数
     */
    @Override
    public int batchDelete(List<Integer> ids) {
        return deptMapper.batchDelete(ids);
    }
}


